Typically, a business software engine comprises a front end communications module and a plurality of instances of back end business logic modules. During the interrogation of the business engine in response to a user query the front end module receives query data corresponding to the user query. The front end module then determines which of the back end modules is most suitable to deal with the user query. Typically, this determination is made based upon criteria such as which back end modules are running the appropriate business logic and the load that a particular back end is subject to at the time of receipt of the user query.
The back end module the processes the query data and formulates interrogation data for the interrogation of external servers where appropriate. This interrogation data passes to the front end module from where it is routed to appropriate external servers. Typically, processing of data by the back end module is suspended until a reply is received from the external servers to the interrogation data.
Replies from the external servers are routed to the suspended back end module via the front end module. Data processing recommences at the suspended back end module and data from the replies is incorporated into a response. The response is output to the user via the front end module.
Such an arrangement does not result in an efficient use of resources as each instance of a back end module can process only a single request. This is because the processing at each back end module is suspended until replies are received to the interrogation data from the external servers.
Attempts to deal with replies asynchronously can result in the corruption of data within the back end module as data is written and read simultaneously from a back end module.